/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import cn.qhplus.emo.configureKotlinAndroid
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension

class AndroidApplicationConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            with(pluginManager) {
                apply("com.android.application")
                apply("org.jetbrains.kotlin.android")
            }

            extensions.configure<BaseAppModuleExtension> {
                configureKotlinAndroid(this)
                defaultConfig.targetSdk = 33
                buildFeatures.buildConfig = true
            }

            extensions.configure<KotlinAndroidProjectExtension>("kotlin"){
                jvmToolchain(11)
            }

            val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
            dependencies {
                dependencies.add("testImplementation", libs.findLibrary("junit4").get())
                dependencies.add("testImplementation", libs.findLibrary("kotlinx-coroutines-test").get())
                dependencies.add("androidTestImplementation", libs.findLibrary("androidx-test-core").get())
                dependencies.add("androidTestImplementation", libs.findLibrary("androidx-test-ext").get())
                dependencies.add("androidTestImplementation", libs.findLibrary("androidx-test-runner").get())
                dependencies.add("androidTestImplementation", libs.findLibrary("androidx-test-rules").get())
                dependencies.add("androidTestImplementation", libs.findLibrary("androidx-test-espresso-core").get())


                configurations.configureEach {
                    resolutionStrategy {
                        force(libs.findLibrary("junit4").get())
                        // Temporary workaround for https://issuetracker.google.com/174733673
                        force("org.objenesis:objenesis:2.6")
                    }
                }
            }
        }
    }

}